案例一:搭建以图搜图系统

本文介绍了以图搜图的概念,以及搭建以图搜图系统的流程。

概念

以图搜图是一种基于图像内容的检索技术,旨在通过输入一张图像来寻找相似或相关的图像。它基于图像的视觉特征,例如颜色、纹理、形状等,通过计算机视觉和机器学习技术,将图像转换为可计算的特征向量,并将其与数据库中的其他图像进行比较和匹配。

以图搜图的应用场景非常广泛。诸如:

  • 在电子商务领域,用户可以通过拍照或上传一张商品图片来搜索相似的商品,从而提供更加精准的购物推荐。

  • 在媒体管理领域,用户可以通过输入一张图片来寻找与之相关的图片,用于整理和管理大量的媒体资源。

  • 在社交媒体领域,用户可以通过上传一张照片来搜索相关的图片,例如找到相同的地点或相似的主题。

此外,以图搜图系统还可以应用于版权保护和网络安全领域,用于检测和识别盗版图片或有害图片等。

搭建流程

创建图片数据存储表

创建图片数据存储表的SQL语句如下:

CREATE TABLE image(
  id bigint(20) comment '主键id',
  image_address varchar(255) comment '图片存储地址', 
  type int(8) comment '图片类型', 
  primary key(id)
);

其中,image_address字段存储的是图片的公网地址。type对应的值和类型如下:

  • 1:bmp格式。

  • 2:gif格式。

  • 3:jpeg格式。

插入图片数据

插入图片数据的SQL语句如下:

INSERT INTO image(id,image_address,type) values(1,'https://xxx/image.bmp',1);

创建向量表

创建向量表的SQL语句如下:

/*polar4ai*/CREATE TABLE image_vector(
  id int,
  image_address varchar,
  image_address_vector vector_512,
  type int, 
  primary key(id)
);

其中,image_address_vector为向量类型字段,维度为512。

将图片向量化

您可以根据实际场景,选择离线将图片向量化并写入向量表,或在线将图片向量化。

  • 离线将图片向量化

    离线将图片向量化并写入向量表的SQL语句如下:

    /*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT id,image_address,type FROM image) 
    with(
      primary_key='id',
      x_cols='image_address',
      mode='async',
      vec_col='image_address_vector'
    ) 
    INTO image_vector;

    其中,_polar4ai_image2vec为图片转向量模型,目前仅支持输出512维向量。primary_key为向量表主键字段。x_cols为存储图片地址字段。mode为图片写入模式。vec_col为向量表中存储向量的字段。

  • 在线将图片向量化

    • 若图片来源于数据库,则在线将图片向量化的SQL语句如下:

      /*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT image_address FROM image WHERE id=1) with();
    • 若图片来源于互联网,则在线将图片向量化的SQL语句如下:

      /*polar4ai*/SELECT * FROM predict(model _polar4ai_image2vec,SELECT 'http://xxxx/image.png') with();

    其中,_polar4ai_image2vec为图片转向量模型,目前仅支持输出512维向量。且目前仅支持将一张图片进行图片向量化。

进行图片检索

进行图片检索的SQL语句如下:

/*polar4ai*/SELECT id,'distance(image_address_vector,[1,2,3,4,5……,512])' FROM image_vector WHERE type=1 LIMIT 10;